package com.hfb.mashibing.alip8.juc.c012;

import java.util.concurrent.TimeUnit;

/**
 * 程序在执行中，如果线程异常，默认情况会被释放
 * 所以，在并发处理中，有异常要多加小心，要不然会发生不一致的情况
 * 比如在web app处理过程中，多个servlet线程共同访问同一个资源，
 * 这个时候如果异常处理不合适；
 * 即，在第一个线程抛出异常，其他线程就会进入同步代码区
 * 有可能会访问到异常产生的数据，
 * 因此，要非常小心的处理同步代码块中的异常
 */
public class T {
    /*volatile*/ boolean running = true;

    void m() {
        System.out.println(Thread.currentThread().getName()+" m start");
        while (running) {
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+" m end");
        }
    }
    
    public static void main(String[] args) {
        final T t = new T();

        new Thread(t::m, "t1").start();
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        t.running = false;

    }
}
